package com.sayice.robotconflict.game.object.property;

/**
 * 可回退的坐标
 *
 * @author shubing
 */
public interface RewindableCoord extends Coord {
    /**
     * 获取上一个x坐标
     *
     * @return 上一个x坐标
     */
    Double getPrevX();
    
    /**
     * 获取上一个y坐标
     *
     * @return 上一个y坐标
     */
    Double getPrevY();
    
    /**
     * 回退到上一个坐标
     *
     * @param pPrevX 上上个x坐标
     * @param pPrevY 上上个y坐标
     */
    void rewind(Double pPrevX, Double pPrevY);
    
    /**
     * x坐标偏移
     *
     * @return 当前x坐标相对于上一个x坐标的偏移，如果上一个x坐标为null，则返回null
     */
    default Double offsetX() {
        return getPrevX() == null ? null : getX() - getPrevX();
    }
    
    /**
     * Y坐标偏移
     *
     * @return 当前y坐标相对于上一个y坐标的偏移，如果上一个y坐标为null，则返回null
     */
    default Double offsetY() {
        return getPrevY() == null ? null : getY() - getPrevY();
    }
}
